package com.pkk.alert.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pkk.alert.common.feige.FeigeComonBuild;
import com.pkk.alert.common.request.feige.FeigeUserPageReqData;
import com.pkk.alert.common.vo.feige.FeigeUserRespVo;
import com.pkk.alert.entity.feige.FeigeAccount;
import com.pkk.alert.entity.feige.FeigeTemplate;
import com.pkk.alert.entity.feige.FeigeUserEntity;
import com.pkk.alert.mybatis.FeigeUserEntityMapper;
import com.pkk.alert.service.FeigeAccountService;
import com.pkk.alert.service.FeigeUserEntityService;
import com.pkk.components.rpc.request.PagedQueryRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 * @author peikunkun<br>
 * @versio V1.0<br>
 * @Title: a<br>
 * @Description: 飞鸽的用户信息<a><br>
 * @date 2017年2019/7/2 0002 午 3:20<br>
 * @URL:[a]
 */
@Service
public class FeigeUserEntityServiceImpl extends ServiceImpl<FeigeUserEntityMapper, FeigeUserEntity> implements
    FeigeUserEntityService {

  @Resource
  private FeigeAccountService feigeAccountService;


  /**
   * @Description: 查询飞鸽用户列表
   * @Param: [feigeUserPageReqData]
   * @return: com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.pkk.alert.entity.feige.FeigeTemplate>
   * @Author: peikunkun
   * @Date: 2019/7/3 0003 下午 5:42
   */
  @Override
  public Page<FeigeUserEntity> findFeigeUserPage(PagedQueryRequest<FeigeUserPageReqData> request) {
    // 不进行 count sql 优化，解决 MP 无法自动优化 SQL 问题
    Page<FeigeTemplate> page = new Page<>(request.getPage().getPageIndex(), request.getPage().getPageSize());
    page.setOptimizeCountSql(false);
    final FeigeUserPageReqData body = request.getBody();

    final HashMap<String, Object> condition = new HashMap<>();
    condition.put("feigeAccountId", body.getFeigeAccountId());
    return baseMapper.findFeigeUserPage(page, condition);
  }

  /**
   * @Description: 同步飞鸽用户信息
   * @Param: []
   * @return: void
   * @Author: peikunkun
   * @Date: 2019/7/5 0005 下午 4:52
   */
  @Override
  public void syncFeigeUser() {
    QueryWrapper<FeigeAccount> conditon = new QueryWrapper<>();
    conditon.eq("statis", "1");
    final List<FeigeAccount> list = feigeAccountService.list(conditon);
    list.parallelStream().forEach(a -> {
      final ArrayList<FeigeUserRespVo> feigeUserRespVos = FeigeComonBuild.buildFeigeUser(a.getSecret());
      feigeUserRespVos.stream().parallel().forEach(u -> {
        final FeigeUserEntity feigeUserEntity = new FeigeUserEntity();
        feigeUserEntity.setFeigeId(u.getId().toString());
        feigeUserEntity.setFeigeName(u.getName());
        feigeUserEntity.setFeigeRemark(u.getRemark());
        feigeUserEntity.setFeigeAccountId(a.getId());

        //查询是否存在
        QueryWrapper<FeigeUserEntity> queryWrapper = new QueryWrapper<FeigeUserEntity>();
        queryWrapper.eq("feige_account_id", a.getId());
        queryWrapper.eq("feige_id", u.getId().toString());
        FeigeUserEntity feigeUserReturn = baseMapper.selectOne(queryWrapper);
        if (feigeUserReturn != null) {
          feigeUserEntity.setId(feigeUserReturn.getId());
          baseMapper.updateById(feigeUserEntity);
        } else {
          baseMapper.insert(feigeUserEntity);
        }
      });

    });

  }

  /**
   * 获取用户数
   *
   * @return java.lang.Integer
   * @Param feigeAccountId:飞鸽账户
   * @author peikunkun
   * @date 2020/12/1 0001 下午 3:27
   * @since
   */
  public Integer countUser(Long feigeAccountId) {
    QueryWrapper<FeigeUserEntity> conditon = new QueryWrapper<>();
    conditon.eq("feige_account_id", feigeAccountId);
    return this.count(conditon);
  }
}
